今天要開始進行controller編程
除了在單一的 routes.php
檔案中定義所有的請求處理邏輯,還可以使用控制器類別來組織此行為。控制器可將相關的 HTTP 請求處理邏輯組成一個類別。控制器一般存放在 app/Http/Controllers
目錄下。
這是控制器類別的範例。所有 Laravel 控制器都應繼承基礎控制器類別,它包含在 Laravel 的預設安裝中:
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* 顯示給定使用者的個人資料。
*
* @param int $id
* @return Response
*/
public function showProfile($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
我們可以經由路由指定控制器行為,就像這樣:
Route::get('user/{id}', 'UserController@showProfile');
現在,當請求和此特定的路由 URI 相匹配時,UserController
類別的 showProfile
方法就會被執行。當然,路由的參數也會被傳遞至該方法。
有一點非常重要,那就是我們在定義控制器路由時,不需要指定完整的控制器路徑。我們只需要「根」App\Http\Controllers
之後的部分類別名稱。預設情況下 RouteServiceProvider
會把routes.php
檔案載入到包含根控制器的路由群組中。
若你選擇在 App\Http\Controllers
目錄內層,使用 PHP 命名空間巢狀或組織控制器,只要使用相對於 App\Http\Controllers
根的特定類別名稱即可。因此,若你的控制器類別全名為App\Http\Controllers\Photos\AdminController
,你可以像這樣註冊一個路由:
Route::get('foo', 'Photos\AdminController@method');
就像閉包路由,你可以指定控制器路由的名稱:
Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);
你也可以使用 route
輔助方法,產生命名控制器路由的 URL:
$url = route('name');